package com.nenude.corejava.ch8;

public class TryClass {
	// try catch 语法
	public static void main(String[] args) {

		int a = 1, b = 2;

		// 1、异常处理方法 try catch
		try {
			int c = a / b;
		} catch (Exception e) {
			// 向上抛出异常
			// throw e;
		}
		
		

		// 2、try{} finally{}
		try {
			int c = a / b;
		} finally {
			System.out.println("一定会执行的代码");
		}

		
		
		// 3、try catch finally
		try {
			// try 可能发生异常的代码
			int c = a / b;

		} catch (Exception e) {
			// 发生异常后需要执行的代码

		} finally {
			// 不管是否发生异常，一定会执行的代码
			System.out.println("一定会执行的代码");
		}

		
		
		// 4、try catch catch finally
		try {
			// try 可能发生异常的代码
			int c = a / b;
			int[] array = new int[3];
			array[3] = 5;

		} catch (ArrayIndexOutOfBoundsException e) {
			// 发生异常后需要执行的代码
			e.printStackTrace();
			System.out.println("数组下标越界异常");
		} catch (ArithmeticException e) {
			// 使用多个catch 块时，需要注意：异常类的父子关系，父类异常需要写到后面
			System.out.println("发生了算术运算异常");
		} finally {
			// 不管是否发生异常，一定会执行的代码
			System.out.println("一定会执行的代码");
		}

		
		
		
		// 5、try catch catch finally---使用| 连接异常，jdk1.7后出现的
		try {
			// try 可能发生异常的代码
		 
			int c = a / b;
			int[] array = new int[3];
			array[3] = 5;

		} // 使用一个catch 捕获多个异常，异常不能有父子关系
		catch (ArrayIndexOutOfBoundsException | ArithmeticException e) {
			// 发生异常后需要执行的代码
			e.printStackTrace();
			System.out.println("数组下标越界异常");
			
			//System.exit(0);//直接退出程序，不执行finally代码块
		} finally {
	// 不管是否发生异常，一定会执行的代码，如果try 或catch 中执行了System.exit(0)，则不执行finally
			System.out.println("一定会执行的代码");
		}

		
		
		
		// 6、try catch 支持嵌套
		try {
			try {
				try {

				} catch (Exception e) {
					// TODO: handle exception
				}
			} catch (Exception e) {
				// TODO: handle exception
			}

		} catch (Exception e) {
			// TODO: handle exception
		}
		
		
	//--7、
		
		try {
			System.out.println("执行try");
			return;
			//return的作用:返回一个数据值；终止一个方法的执行
			
		} catch (Exception e) {
			System.out.println("执行catch");
			return;
		}finally{
			
			//在try 或catch中，如果执行了return语句，finally块还会执行
			System.out.println("执行finally");
		}
		
		
		

		//System.out.println("main 方法执行完毕");

	}

}
